grammar Grammar;
 
/*------------------------------------------------------------------
 * PARSER RULES 
 *------------------------------------------------------------------*/
 
productions    : (left right NEWLINE)+ ;
left           : NONTERMINAL WHITESPACE ARROW ;
right          : (WHITESPACE symbols)+ (WHITESPACE OR (WHITESPACE symbols)+)* probabilities ;
probabilities  : WHITESPACE COLON  WHITESPACE PROBABILITY ;
symbols        : TERMINAL | NONTERMINAL | EPSILON ;
 
/*------------------------------------------------------------------
 * LEXER RULES
 *------------------------------------------------------------------*/
 
NONTERMINAL : (UPPERCASE)+ ;

fragment UPPERCASE : 'A'..'Z' ;

TERMINAL : LOWERCASE (LOWERCASE | NUMBER)* ;

fragment LOWERCASE : 'a'..'z' ;

fragment NUMBER  : (DIGIT)+ ;
 
fragment DIGIT  : '0'..'9' ;

COLON : ':' ;

PROBABILITY : ('0' ('.' NUMBER)?) | ('1' ('.' '0'+)?) ;

ARROW : '-''>' ;

OR : '|' ;
 
WHITESPACE : ( '\t' | ' ' | '\r' | '\u000C' )+  ;

NEWLINE : WHITESPACE* ('\n') ;

EPSILON : 'E''p''s' ; 
